<?php

class ArticleController extends BackOfficeController
{
    /**
     * @var string the default layout for the views. Defaults to '//layouts/column2', meaning
     * using two-column layout. See 'protected/views/layouts/column2.php'.
     */
    public $layout = '//layouts/column2';

    /**
     * Displays a particular model.
     * @param integer $id the ID of the model to be displayed
     */
    public function actionView($id)
    {
        $this->render('view', array(
            'model' => FSM::run('Article.ArticleAPI.get', array('id' => $id))->model,
        ));
    }

    /**
     * Creates a new model.
     * If creation is successful, the browser will be redirected to the 'view' page.
     */
    public function actionCreate()
    {
        $this->actionUpdate();
    }

    /**
     * Updates a particular model.
     * If update is successful, the browser will be redirected to the 'view' page.
     * @param integer $id the ID of the model to be updated
     */
    public function actionUpdate()
    {
        if (Yii::app()->request->IsPostRequest) {
            // save posted data
            $_POST['validateOnly'] = ($this->post('ajax', '') == 'article-form');
            $result = FSM::run('Article.ArticleAPI.save', $_POST);
            $model = $result->model;

            if ($this->post('ajax', '') == 'article-form') {
                echo $result->getActiveErrorMessages($result->model);
                Yii::app()->end();
            }
            if (!$result->hasErrors()) {

                //Begin saving tabula input:
                //Find all language article saved in database with curren article id
                $languageArticle = LanguageArticle::model()->findAllByAttributes(array(
                    'article_id' => $model->id,
                ));
                if (!$languageArticle) {
                    $langList = Language::model()->findAll('status=1');
                    if (count($langList)) {
                        foreach ($langList as $i => $lang) {
                            $languageArticle[$i] = new LanguageArticle();
                            $languageArticle[$i]->article_id = $model->id;
                        }
                    }

                }

                $valid = true;
                foreach ($languageArticle as $i => $item) {
                    if (isset($_POST['LanguageArticle'][$i]))
                        $item->attributes = $_POST['LanguageArticle'][$i];
                    $valid = $item->validate() && $valid;
                }

                if ($valid) { // all items are valid
                    // ...save all setting
                    foreach ($languageArticle as $i => $item) {
                        $item->attributes = $_POST['LanguageArticle'][$i];
                        $item->save();
                    }
                }
                //End saving tabula input

                $this->message = Yii::t('Core', 'Item has been saved successfully.');
                $this->redirect(array('update', 'id' => $model->id));
            }
        } else {
            // show edit form
            $id = $this->get('id', 0);
            if ($id == 0) {
                $model = new Article();
            } else {
                $model = Article::model()->findByPk($id);
            }
        }

        $this->render('update', array('model' => $model));
    }

    /**
     * Deletes a particular model.
     * If deletion is successful, the browser will be redirected to the 'index' page.
     * @param integer $id the ID of the model to be deleted
     */
    public function actionDelete($id)
    {
        if (Yii::app()->request->isPostRequest) {
            // we only allow deletion via POST request
            if (($id = $this->get('id', null)) !== null) {
                $ids = is_numeric($id) ? array($id) : explode(',', $id);

                // delete one or multiple objects given the list of object IDs
                $result = FSM::run('Article.ArticleAPI.delete', array('ids' => $ids));
                if ($result->hasErrors()) {
                    echo $result->getError('ErrorCode');
                } elseif (!Yii::app()->request->isAjaxRequest) {
                    // only redirect user to the admin page if it is not an AJAX request
                    $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
                }
            } else {
                throw new CHttpException(400, Yii::t('Core', 'Cannot delete item with the given ID.'));
            }
        } else {
            throw new CHttpException(400, Yii::t('Core', 'Invalid request. Please do not repeat this request again.'));
        }
    }

    /**
     * Lists all models.
     */
    public function actionIndex()
    {
        $this->actionAdmin();
    }

    /**
     * Manages all models.
     */
    public function actionAdmin()
    {
        Yii::import('Site.models.LanguageCategory');
        // get selected language
        $langs = Language::model()->findAll('status=1');
        $selectedLocale = trim($this->get('locale','en_us'));
        $localeExist = false;
        foreach($langs as $lang)
        {
            if ($lang->locale == $selectedLocale)
            {
                $localeExist = true;
                break;    
            }    
        }
        if (!$localeExist)
            throw new CHttpException(404, 'The selected language does not exist');
        
        $model = new Article('search');
        $model->unsetAttributes(); // clear any default values
        if (isset($_GET['Article']))
            $model->attributes = $_GET['Article'];

        $this->render('admin', array(
            'model' => $model,
            'langs' => CHtml::listData($langs,'locale','name'),
            'selectedLocale' => $selectedLocale
        ));
    }
}
